@VERSION = 0.029 foxdraw.hZ-$#!Arial, 0, 9, 5, 15, 12, 21, 3, 0 frmfd foxdraw.hPixels1Form class that illustrates VFP graphics methods.Class1formfrmfdtbrfd1 Object Reference to FoxDraw Toolbar cformname Property to store current form name cformmode Property to store FormMode - (Active or Inactive) cpencolor Property to hold literal value of pen color ndrawmode Property to hold current drawmode - 1 = Lines, 2 = Rays *drawaction Method: What drawing action to take *drawcolor Method: Sets drawing color. *setcaption Method: Sets caption to current state *chgdrawmode Method: Switches drawing mode *setpenwidth Method: Set PenWidth property *setdrawmode Method: Sets DrawMode property *setdrawstyle Method: Sets DrawStyle property *clearform Method: Clears the form surface *graphdemo Method: Main module to demo graphic methods. *urand Method: Generates random number for use by graphdemo method.  % u U4%(T@T>TC - (Inactive -  - (Active - 6  U NMPOINTERTHISFORM MOUSEPOINTER CFORMMODE SETCAPTIONREFRESH8 4TT UNCOLOR CCOLORNAMETHISFORM FORECOLOR CPENCOLOR SETCAPTIONZ2TPen/CCZA)TU LCCOLORNAMETHISFORM CPENCOLOR DRAWWIDTHCAPTIONTHIS CFORMNAME CFORMMODE(%TC6UTHISFORM NDRAWMODE4TUNVALUETHISFORM DRAWWIDTH4TUNVALUETHISFORMDRAWMODE4TUNVALUETHISFORM DRAWSTYLE UTHISFORMCLS4/   T T  TZ T H}  TT  T C  (\C 2 'C Draw Style: CZ T %C 222 T T   C2, C, C2  CZ345678%CZ4687T C  HHi C T?T? C T?T? C /T?T?2iT?T?,TC    6,TC    6 H   CCCC   L#CCCC   T 2CdT Cd#C   T  UNCHOICEILNXAXISLNYAXISLNXPOSLNYPOSLNRADIUS LNFILLSTYLELNASPECTLNBOXXLNBOXYLNOLDDRAWWIDTHTHISFORMWIDTHHEIGHT DRAWWIDTHPSETPRINT DRAWSTYLELINE FILLSTYLEURANDCURRENTXCURRENTYCIRCLEBOXREFRESH) 4BCC8UNLOWERNUPPER4%  %[C!C  U NBUTTONNSHIFTNXCOORDNYCOORDTHIS MOUSEPOINTERTHISFORM NDRAWMODELINECURRENTXCURRENTYC4%<CUNBUTTONNSHIFTNXCOORDNYCOORDTHISFORM MOUSEPOINTERPSETrTTT - (Active - TBlackT UTHIS SCALEMODE CFORMNAMECAPTION CFORMMODE CPENCOLOR MOUSEPOINTER SETCAPTIONR U drawaction, drawcolor  setcaption chgdrawmode8 setpenwidthy setdrawmode setdrawstyle clearform) graphdemoIurand MouseMoveO MouseDownH Init Activate 1qA43r#3R3q3q4q43q1qqqAQAAA2AA1AA331ARAA41BQA41Q4Q1 5VQs'$,F299@!YE[.^Sgsl28sWa)ivate 1qA4lPROCEDURE drawaction Parameters nMPointer #define INACTIVE_LOC " - (Inactive - " #define ACTIVE_LOC " - (Active - " * Change mouse pointer and form caption as needed if nMPointer = 1 THISFORM.mousepointer = 2 else THISFORM.MousePointer = 1 endif THISFORM.cFormMode = iif(nMPointer = 2, ; INACTIVE_LOC,ACTIVE_LOC) THISFORM.SetCaption THISFORM.refresh ENDPROC PROCEDURE drawcolor Parameters nColor, cColorName * Set colors, add to caption THISFORM.forecolor = nColor THISFORM.cPenColor = cColorName THISFORM.SetCaption ENDPROC PROCEDURE setcaption *- Set form caption to current mode, color LOCAL lcColorName #define PEN_LOC "Pen" lcColorName = THISFORM.cPenColor + PEN_LOC + ; "/" + ltrim(str(THISFORM.DrawWidth,3,0)) +")" THISFORM.Caption = ; THIS.cFormName + THIS.cFormMode + lcColorName ENDPROC PROCEDURE chgdrawmode *- Switch draw modes THISFORM.nDrawMode = IIF(THISFORM.nDrawMode = 1, 0, 1) ENDPROC PROCEDURE setpenwidth Parameters nValue * Set pen width THISFORM.DrawWidth = nValue ENDPROC PROCEDURE setdrawmode Parameters nValue * Set Draw mode THISFORM.DrawMode = nValue ENDPROC PROCEDURE setdrawstyle Parameters nValue * Set draw style THISFORM.DrawStyle = nValue ENDPROC PROCEDURE clearform * Clear the form surface THISFORM.Cls ENDPROC PROCEDURE graphdemo PARAMETERS nChoice * Show various graph methods - line, circle, box #DEFINE DRAWSTYLE_LOC "Draw Style: " LOCAL I, lnXaxis,lnYaxis,lnXPos,lnYPos,lnRadius,; lnFillStyle,lnAspect,lnBoxX,lnBoxY,lnOldDrawWidth lnXaxis = THISFORM.Width lnYAxis = THISFORM.Height lnRadius = 90 lnAspect = 3 * Select Graphics method - Line, Circle, or Box DO CASE CASE nChoice = 1 * Draw a line in each DrawStyle I = 1 lnOldDrawWidth = THISFORM.DrawWidth THISFORM.DrawWidth = 1 THISFORM.pset(10,10) FOR I = 1 to 4 THISFORM.Pset(10,I*50) THISFORM.Print ( DRAWSTYLE_LOC + str((I-1)) ) THISFORM.DrawStyle = I - 1 THISFORM.Line(10,I*50, lnXAxis-50,I*50) ENDFOR THISFORM.DrawStyle = 0 && Reset DrawStyle to normal THISFORM.DrawWidth = lnOldDrawWidth CASE nChoice = 2 * Draw a triangle THISFORM.Line(150,50,300,200) THISFORM.line(300,200,150,200) THISFORM.line(150,200,150,50) CASE str(nChoice,1,0) $ "345678" * Circles - Open = 3, Filled = 4 * Ellipses - Open = 5, Filled = 6 * Square - Open = 7, Filled = 8 IF str(nChoice,1,0) $ "468" * Select random fill style - 0/7 THISFORM.FillStyle = THISFORM.uRand(1,7)-1 ENDIF * Calculate X,Y position for circle randomly in quadrant 1-4 DO CASE CASE THISFORM.uRand(1,4) = 1 lnXpos = lnXaxis*.25 lnYpos = lnYaxis*.25 CASE THISFORM.uRand(1,4) = 2 lnXpos = lnXaxis*.75 lnYpos = lnYaxis*.25 CASE THISFORM.uRand(1,4) = 3 lnXpos = lnXaxis*.25 lnYpos = lnYaxis*.75 OTHERWISE && uRand = 4 lnXpos = lnXaxis*.75 lnYpos = lnYaxis*.75 ENDCASE * test draw from last position lnXpos = IIF(thisform.currentx < 2, THISFORM.Width /2, THISFORM.CurrentX) lnYpos = IIF(thisform.currenty < 2, THISFORM.Height /2, THISFORM.CurrentY) DO CASE CASE nChoice = 3 or nChoice = 4 * Circle - plain or filled THISFORM.Circle(; lnRadius * RAND(),lnXPos * RAND(),lnYpos * RAND() ) CASE nChoice = 5 or nChoice = 6 THISFORM.Circle(; lnRadius, lnXPos*RAND(),lnYPos*RAND(),lnAspect*RAND()) CASE nChoice = 7 or nChoice = 8 lnBoxX = 50 + RAND()*100 lnBoxY = 30 + RAND()*100 THISFORM.box( lnBoxX,lnBoxY, lnBoxX+170,lnBoxY+150 ) ENDCASE THISFORM.FillStyle = 1 ENDCASE THISFORM.Refresh ENDPROC PROCEDURE urand PARAMETERS nLower, nUpper * Return uniform series of integers between nLower, nUpper RETURN INT((nUpper-nLower+1)*RAND()+1) ENDPROC PROCEDURE MouseMove Parameters nButton, nShift, nXCoord, nYCoord *- Type of lines to draw - regular or 'anchored' (rays) if nButton = 1 and This.MousePointer = 2 if THISFORM.nDrawMode = 1 && Lines *- Draw from MouseDown point THISFORM.LINE(nXCoord, nYCoord) else && Rays *- Draw to CurrentX, CurrentY THISFORM.LINE(nXCoord, nYCoord, THISFORM.CurrentX, THISFORM.CurrentY) endif endif ENDPROC PROCEDURE MouseDown Parameters nButton, nShift, nXCoord, nYCoord *- Set Start point if nDrawMode = 1 (Lines) if THISFORM.MousePointer = 2 THISFORM.PSet(nXCoord, nYCoord) endif ENDPROC PROCEDURE Init *- Form Specific Init #define MODE_LOC " - (Active - " #define PENCOLOR_LOC "Black" *- Set form properties THIS.ScaleMode = 3 THIS.cFormName = THIS.Caption THIS.cFormMode = MODE_LOC THIS.cPenColor = PENCOLOR_LOC THIS.MousePointer = 2 THIS.SetCaption ENDPROC PROCEDURE Activate WAIT CLEAR ENDPROC  ScaleMode = 3 Top = 0 Left = 0 Height = 454 Width = 633 Closable = .F. DoCreate = .T. Caption = "FoxDraw" MousePointer = 1 WindowState = 2 BackColor = 255,255,255 tbrfd1 = "" cformname = "" cformmode = "" cpencolor = "" ndrawmode = 1 Name = "frmfd" form